{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取用户数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>Location</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID                            Location   Age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.read_csv('./data/BX-Users.csv',sep=';')\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 修改列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                            location   age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.columns = ['user_id','location','age']\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['nyc, new york, usa' 'stockton, california, usa'\n",
      " 'moscow, yukon territory, russia' ... 'sergnano, lombardia, italy'\n",
      " 'stranraer, n/a, united kingdom' 'tacoma, washington, united kingdom']\n",
      "57339\n"
     ]
    }
   ],
   "source": [
    "location_s = df_user['location'].unique()\n",
    "print(location_s)\n",
    "print(len(location_s))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 每个地区，平均有多少用户"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.863321648441723"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.shape[0] / len(location_s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 把location定位为国家"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location   age\n",
       "0        1             usa   NaN\n",
       "1        2             usa  18.0\n",
       "2        3          russia   NaN\n",
       "3        4        portugal  17.0\n",
       "4        5  united kingdom   NaN"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['location'] = df_user['location'].apply(lambda location:location.rsplit(',',maxsplit=1)[-1].strip())\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "usa               139711\n",
       "canada             21658\n",
       "united kingdom     18538\n",
       "germany            17043\n",
       "spain              13147\n",
       "australia          11784\n",
       "italy              11266\n",
       "                    4578\n",
       "france              3455\n",
       "portugal            3325\n",
       "Name: location, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['location'].value_counts()[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    df_user['location'].value_counts(),\n",
    "    labels = df_user['location'].value_counts().index,\n",
    "    autopct = '%2.f%%',\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24.0    5687\n",
       "25.0    5618\n",
       "26.0    5547\n",
       "23.0    5456\n",
       "27.0    5383\n",
       "Name: age, dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "age_counts = df_user[~df_user['age'].isnull()]['age'].value_counts()\n",
    "age_counts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    age_counts.index,\n",
    "    age_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0    416\n",
       "1.0    288\n",
       "2.0    105\n",
       "3.0     45\n",
       "4.0     28\n",
       "Name: age, dtype: int64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "age_counts_order_by_age = age_counts.sort_index()\n",
    "age_counts_order_by_age.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    age_counts_order_by_age.index,\n",
    "    age_counts_order_by_age\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 年龄分段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def divide_age(age):\n",
    "    \"\"\"\n",
    "    0:未标注年龄（Nan，>100, 0-6 ）\n",
    "    1:少儿（7-12）\n",
    "    2:青少年（13-17）\n",
    "    3:青年（18-45）\n",
    "    4:中年（46-69）\n",
    "    5:老年（70--100）\n",
    "    \"\"\"\n",
    "    if np.isnan(age) or (age <= 6) or (age >100):\n",
    "        return 0\n",
    "    if age >= 7 and age <= 12:\n",
    "        return 1\n",
    "    if age >= 13 and age <= 17:\n",
    "        return 2\n",
    "    if age >= 18 and age <= 45:\n",
    "        return 3\n",
    "    if age >= 46 and age <= 69:\n",
    "        return 4\n",
    "    if age >= 70 and age <= 100:\n",
    "        return 5\n",
    "df_user['age'] = df_user['age'].apply(divide_age)\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 变换年龄类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['age'] = df_user['age'].astype(int)\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取打分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>ISBN</th>\n",
       "      <th>Book-Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID        ISBN  Book-Rating\n",
       "0   276725  034545104X          0.0\n",
       "1   276726  0155061224          5.0\n",
       "2   276727  0446520802          0.0\n",
       "3   276729  052165615X          3.0\n",
       "4   276729  0521795028          6.0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating = pd.read_csv('./data/BX-Book-Ratings.csv',sep=';')\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X     0.0\n",
       "1   276726  0155061224     5.0\n",
       "2   276727  0446520802     0.0\n",
       "3   276729  052165615X     3.0\n",
       "4   276729  0521795028     6.0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.columns = ['user_id','item_id','rating']\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析活跃用户"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "11676     13602\n",
       "198711     7550\n",
       "153662     6109\n",
       "98391      5891\n",
       "35859      5850\n",
       "Name: user_id, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_rating_counts = df_rating['user_id'].value_counts()\n",
    "user_rating_counts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "105283"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_rating_counts.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(user_rating_counts)),\n",
    "    user_rating_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析商品流行度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0971880107    2502\n",
       "0316666343    1295\n",
       "0385504209     883\n",
       "0060928336     732\n",
       "0312195516     723\n",
       "Name: item_id, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_rating_counts = df_rating['item_id'].value_counts()\n",
    "item_rating_counts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "340557"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_rating_counts.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(item_rating_counts)),\n",
    "    item_rating_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除有误数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_rating = df_rating.dropna()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 变换打分类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X       0\n",
       "1   276726  0155061224       5\n",
       "2   276727  0446520802       0\n",
       "3   276729  052165615X       3\n",
       "4   276729  0521795028       6"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating['rating'] = df_rating['rating'].astype(int)\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 合并用户表与打分表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data = pd.merge(df_user,df_rating,on='user_id',how='inner')\n",
    "df_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 保存合并的dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as cPickle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "cPickle.dump(df_data,open('./data/df_data.pkl','wb'))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
